
 <!DOCTYPE HTML>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  
    <title>利用n和nvm管理Node的版本 | HelloBlog</title>
    <meta name="viewport" content="width=device-width, initial-scale=1,user-scalable=no">
    
    <meta name="author" content="lisx">
    

    
    <meta name="description" content="作者: JeremyWei | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://it.taocms.org/03/3079.htm.html写在前面金陵的3月又是雨季，细雨吻着羞花，极目望窗外，烟雨朦胧的紫金山忽隐忽现，此时最适合读诗与编程。思绪拉回到眼前，开始我们今天的主题－关于如何管理Node的版本。
Node最近几年可谓风光无限，不仅让前端工程师们逆袭">
<meta property="og:type" content="article">
<meta property="og:title" content="利用n和nvm管理Node的版本">
<meta property="og:url" content="http://lisx.github.io/post/利用n和nvm管理Node的版本/index.html">
<meta property="og:site_name" content="HelloBlog">
<meta property="og:description" content="作者: JeremyWei | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://it.taocms.org/03/3079.htm.html写在前面金陵的3月又是雨季，细雨吻着羞花，极目望窗外，烟雨朦胧的紫金山忽隐忽现，此时最适合读诗与编程。思绪拉回到眼前，开始我们今天的主题－关于如何管理Node的版本。
Node最近几年可谓风光无限，不仅让前端工程师们逆袭">
<meta property="og:updated_time" content="2016-02-18T06:03:34.000Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="利用n和nvm管理Node的版本">
<meta name="twitter:description" content="作者: JeremyWei | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://it.taocms.org/03/3079.htm.html写在前面金陵的3月又是雨季，细雨吻着羞花，极目望窗外，烟雨朦胧的紫金山忽隐忽现，此时最适合读诗与编程。思绪拉回到眼前，开始我们今天的主题－关于如何管理Node的版本。
Node最近几年可谓风光无限，不仅让前端工程师们逆袭">

    
    <link rel="alternative" href="/atom.xml" title="HelloBlog" type="application/atom+xml">
    
    
    <link rel="icon" href="/img/favicon.ico">
    
    
    <link rel="apple-touch-icon" href="/img/jacman.jpg">
    <link rel="apple-touch-icon-precomposed" href="/img/jacman.jpg">
    
    <link rel="stylesheet" href="/css/style.css" type="text/css">
</head>

  <body>
    <header>
      
<div>
		
			<div id="imglogo">
				<a href="/"><img src="/img/logo.png" alt="HelloBlog" title="HelloBlog"/></a>
			</div>
			
			<div id="textlogo">
				<h1 class="site-name"><a href="/" title="HelloBlog">HelloBlog</a></h1>
				<h2 class="blog-motto">github blog 学习</h2>
			</div>
			<div class="navbar"><a class="navbutton navmobile" href="#" title="菜单">
			</a></div>
			<nav class="animated">
				<ul>
					<ul>
					 
						<li><a href="/">主页|Home</a></li>
					
						<li><a href="/archives">归档|Archives</a></li>
					
						<li><a href="/about">关于|About</a></li>
					
					<li>
 					
											<form class="search" action="/search/index.html" method="get" accept-charset="utf-8">
																		<label>Search</label>
																								<input type="text" id="search" class="st-default-search-input" maxlength="20" placeholder="Search" />
																														</form>
				
				
				
					</li>
				</ul>
			</nav>			
</div>

    </header>
    <div id="container">
      <div id="main" class="post" itemscope itemprop="blogPost">
  
	<article itemprop="articleBody"> 
		<header class="article-info clearfix">
  <h1 itemprop="name">
    
      <a href="/post/利用n和nvm管理Node的版本/" title="利用n和nvm管理Node的版本" itemprop="url">利用n和nvm管理Node的版本</a>
  </h1>
  <p class="article-author">By
       
		<a href="/about" title="lisx" target="_blank" itemprop="author">lisx</a>
		
  <p class="article-time">
    <time datetime="2016-02-18T05:56:17.000Z" itemprop="datePublished"> 发表于 2016-02-18</time>
    
  </p>
</header>
	<div class="article-content">
		
		<div id="toc" class="toc-article">
			<strong class="toc-title">文章目录</strong>
		
			
		
		</div>
		
		<p>作者: JeremyWei | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明<br>网址: <a href="http://it.taocms.org/03/3079.htm.html" target="_blank" rel="external">http://it.taocms.org/03/3079.htm.html</a><br>写在前面<br>金陵的3月又是雨季，细雨吻着羞花，极目望窗外，烟雨朦胧的紫金山忽隐忽现，此时最适合读诗与编程。思绪拉回到眼前，开始我们今天的主题－关于如何管理Node的版本。</p>
<p>Node最近几年可谓风光无限，不仅让前端工程师们逆袭成为「全栈工程师」，也使JavaScript这门动态语言一雪前耻，当年对其的重视相当不够，很多人甚至觉得它是个美丽的错误，不应该存在，如今其借助Node可赚足全球开发者的眼球（28k个star和6k个fork）。大量开发者的贡献使Node版本的迭代速度很快，版本很多（横跨0.6到0.11），所以升级Node版本就成为了一个问题。目前有n和nvm这两个工具可以对Node进行无痛升级，本文简单介绍一下二者的使用。</p>
<p>n<br>n是Node的一个模块，作者是TJ Holowaychuk（鼎鼎大名的Express框架作者），就像它的名字一样，它的理念就是简单：</p>
<p>“no subshells, no profile setup, no convoluted api, just simple”<br>安装很简单：</p>
<p>$ sudo npm install -g n<br>安装完成之后，直接输入n后输出当前已经安装的node版本以及正在使用的版本（前面有一个o），你可以通过移动上下方向键来选择要使用的版本，最后按回车生效。</p>
<p>$ n<br>    0.10.1<br>        0.10.15<br>    o   0.10.21<br>        0.11.8<br>        如果你要安装其他的版本（比如0.11.12），那么如下：</p>
<pre><code>$ n 0.11.12
install : 0.11.12
   mkdir : /usr/local/n/versions/0.11.12
      fetch : http://nodejs.org/dist/v0.11.12/node-v0.11.12-darwin-x64.tar.gz
  安装最新的版本

  $ n latest
  安装稳定版本

  $ n stable
  删除某个版本

  $ n rm 0.10.1 
  以指定的版本来执行脚本

  $ n use 0.10.21 some.js
  nvm
  nvm全称Node Version Manager，它与n的实现方式不同，其是通过shell脚本实现的。

  安装方式有两种：

  $ curl https://raw.github.com/creationix/nvm/v0.4.0/install.sh | sh
  或者

  $ wget -qO- https://raw.github.com/creationix/nvm/v0.4.0/install.sh | sh
  以上脚本会把nvm库clone到~/.nvm，然后会在~/.bash_profile, ~/.zshrc或`~/.profile末尾添加source，安装完成之后，你可以用以下命令来安装node

  $ nvm install 0.10
  使用指定的版本

  $ nvm use 0.10
  查看当前已经安装的版本

  $ nvm ls
  .nvm
  -&gt;  v0.10.24
  查看正在使用的版本

  $ nvm current
  v0.10.24
  以指定版本执行脚本

  $ nvm run 0.10.24 myApp.js
  卸载nvm

  $ rm -rf ~/.nvm
  总结
  以上就是两种Node版本管理工具的安装和基本使用方法，选择适合你的那一种口味。

  参考
  https://github.com/creationix/nvm
</code></pre><p><a href="https://github.com/visionmedia/n" target="_blank" rel="external">https://github.com/visionmedia/n</a><br>(完)</p>
  
	</div>
		<footer class="article-footer clearfix">
<div class="article-catetags">

<div class="article-categories">
  <span></span>
  <a class="article-category-link" href="/categories/nodejs/">nodejs</a>
</div>


</div>



	<div class="article-share" id="share">
	
	  <div data-url="http://lisx.github.io/post/利用n和nvm管理Node的版本/" data-title="利用n和nvm管理Node的版本 | HelloBlog" data-tsina="null" class="share clearfix">
	  </div>
	
	</div>


</footer>

   	       
	</article>
	
<nav class="article-nav clearfix">
 
 <div class="prev" >
 <a href="/post/删除时间段的文件/" title="删除时间段的文件">
  <strong>上一篇：</strong><br/>
  <span>
  删除时间段的文件</span>
</a>
</div>


<div class="next">
<a href="/post/Table表格内容超长时：自动截取、自动换行/"  title="Table表格内容超长时：自动截取、自动换行">
 <strong>下一篇：</strong><br/> 
 <span>Table表格内容超长时：自动截取、自动换行
</span>
</a>
</div>

</nav>

	
<section id="comments" class="comment">
	<div class="ds-thread" data-thread-key="post/利用n和nvm管理Node的版本/" data-title="利用n和nvm管理Node的版本" data-url="http://lisx.github.io/post/利用n和nvm管理Node的版本/"></div>
</section>


</div>  
      <div class="openaside"><a class="navbutton" href="#" title="显示侧边栏"></a></div>

  <div id="toc" class="toc-aside">
  <strong class="toc-title">文章目录</strong>
 
 
 
  </div>

<div id="asidepart">
<div class="closeaside"><a class="closebutton" href="#" title="隐藏侧边栏"></a></div>
<aside class="clearfix">

  
<div class="github-card">
<p class="asidetitle">Github 名片</p>
<div class="github-card" data-github="lisx" data-width="220" data-height="119" data-theme="medium">
<script type="text/javascript" src="//cdn.jsdelivr.net/github-cards/latest/widget.js" ></script>
</div>
  </div>



  
<div class="categorieslist">
	<p class="asidetitle">分类</p>
		<ul>
		
		  
			<li><a href="/categories/CSS/" title="CSS">CSS<sup>1</sup></a></li>
		  
		
		  
			<li><a href="/categories/blog/" title="blog">blog<sup>1</sup></a></li>
		  
		
		  
			<li><a href="/categories/mac/" title="mac">mac<sup>1</sup></a></li>
		  
		
		  
			<li><a href="/categories/macbook/" title="macbook">macbook<sup>4</sup></a></li>
		  
		
		  
			<li><a href="/categories/nodejs/" title="nodejs">nodejs<sup>1</sup></a></li>
		  
		
		  
			<li><a href="/categories/sublime/" title="sublime">sublime<sup>1</sup></a></li>
		  
		
		  
			<li><a href="/categories/macbook/vim/" title="vim">vim<sup>1</sup></a></li>
		  
		
		  
			<li><a href="/categories/macbook/快捷键/" title="快捷键">快捷键<sup>3</sup></a></li>
		  
		
		</ul>
</div>


  <div class="linkslist">
  <p class="asidetitle">友情链接</p>
    <ul>
        
          <li>
            
            	<a href="https://coderq.com" target="_blank" title="一个面向程序员交流分享的新一代社区">码农圈</a>
            
          </li>
        
          <li>
            
            	<a href="http://wuchong.me" target="_blank" title="Jark&#39;s Blog">Jark&#39;s Blog</a>
            
          </li>
        
    </ul>
</div>

</aside>
</div>
    </div>
    <footer><div id="footer" >
	
	<div class="line">
		<span></span>
		<div class="author"></div>
	</div>
	
	
	<section class="info">
		<p> Hello ,I&#39;m Larry Page in Google. <br/>
			This is my blog,believe it or not.</p>
	</section>
	 
	<div class="social-font" class="clearfix">
		
		<a href="http://weibo.com/3501802042" target="_blank" class="icon-weibo" title="微博"></a>
		
		
		<a href="https://github.com/lisx" target="_blank" class="icon-github" title="github"></a>
		
		
		
		
		
		<a href="https://www.linkedin.com/in/lisx" target="_blank" class="icon-linkedin" title="linkedin"></a>
		
		
		
		
		
	</div>
			
		

		<p class="copyright">
		Powered by <a href="http://hexo.io" target="_blank" title="hexo">hexo</a> and Theme by <a href="https://github.com/wuchong/jacman" target="_blank" title="Jacman">Jacman</a> © 2016 
		
		<a href="/about" target="_blank" title="lisx">lisx</a>
		
		
		</p>
		<script type="text/javascript">
  (function(w,d,t,u,n,s,e){w['SwiftypeObject']=n;w[n]=w[n]||function(){
     (w[n].q=w[n].q||[]).push(arguments);};s=d.createElement(t);
       e=d.getElementsByTagName(t)[0];s.async=1;s.src=u;e.parentNode.insertBefore(s,e);
         })(window,document,'script','//s.swiftypecdn.com/install/v2/st.js','_st');
  
  _st('install','m45g4ykUuALtMMD8xRuz','2.0.0');
</script>  
<script>
(function(){
    var bp = document.createElement('script');
    bp.src = '//push.zhanzhang.baidu.com/push.js';
    var s = document.getElementsByTagName("script")[0];
    s.parentNode.insertBefore(bp, s);
})();
</script>
</div>
</footer>
    <script src="/js/jquery-2.0.3.min.js"></script>
<script src="/js/jquery.imagesloaded.min.js"></script>
<script src="/js/gallery.js"></script>
<script src="/js/jquery.qrcode-0.12.0.min.js"></script>

<script type="text/javascript">
$(document).ready(function(){ 
  $('.navbar').click(function(){
    $('header nav').toggleClass('shownav');
  });
  var myWidth = 0;
  function getSize(){
    if( typeof( window.innerWidth ) == 'number' ) {
      myWidth = window.innerWidth;
    } else if( document.documentElement && document.documentElement.clientWidth) {
      myWidth = document.documentElement.clientWidth;
    };
  };
  var m = $('#main'),
      a = $('#asidepart'),
      c = $('.closeaside'),
      o = $('.openaside');
  c.click(function(){
    a.addClass('fadeOut').css('display', 'none');
    o.css('display', 'block').addClass('fadeIn');
    m.addClass('moveMain');
  });
  o.click(function(){
    o.css('display', 'none').removeClass('beforeFadeIn');
    a.css('display', 'block').removeClass('fadeOut').addClass('fadeIn');      
    m.removeClass('moveMain');
  });
  $(window).scroll(function(){
    o.css("top",Math.max(80,260-$(this).scrollTop()));
  });
  
  $(window).resize(function(){
    getSize(); 
    if (myWidth >= 1024) {
      $('header nav').removeClass('shownav');
    }else{
      m.removeClass('moveMain');
      a.css('display', 'block').removeClass('fadeOut');
      o.css('display', 'none');
      
      $('#toc.toc-aside').css('display', 'none');
        
    }
  });
});
</script>

<script type="text/javascript">
$(document).ready(function(){ 
  var ai = $('.article-content>iframe'),
      ae = $('.article-content>embed'),
      t  = $('#toc'),
      ta = $('#toc.toc-aside'),
      o  = $('.openaside'),
      c  = $('.closeaside');
  if(ai.length>0){
    ai.wrap('<div class="video-container" />');
  };
  if(ae.length>0){
   ae.wrap('<div class="video-container" />');
  };
  c.click(function(){
    ta.css('display', 'block').addClass('fadeIn');
  });
  o.click(function(){
    ta.css('display', 'none');
  });
  $(window).scroll(function(){
    ta.css("top",Math.max(140,320-$(this).scrollTop()));
  });
});
</script>


<script type="text/javascript">
$(document).ready(function(){ 
  var $this = $('.share'),
      url = $this.attr('data-url'),
      encodedUrl = encodeURIComponent(url),
      title = $this.attr('data-title'),
      tsina = $this.attr('data-tsina'),
      description = $this.attr('description');
  var html = [
  '<div class="hoverqrcode clearfix"></div>',
  '<a class="overlay" id="qrcode"></a>',
  '<a href="https://www.facebook.com/sharer.php?u=' + encodedUrl + '" class="article-share-facebook" target="_blank" title="Facebook"></a>',
  '<a href="https://twitter.com/intent/tweet?url=' + encodedUrl + '" class="article-share-twitter" target="_blank" title="Twitter"></a>',
  '<a href="#qrcode" class="article-share-qrcode" title="微信"></a>',
  '<a href="http://widget.renren.com/dialog/share?resourceUrl=' + encodedUrl + '&srcUrl=' + encodedUrl + '&title=' + title +'" class="article-share-renren" target="_blank" title="人人"></a>',
  '<a href="http://service.weibo.com/share/share.php?title='+title+'&url='+encodedUrl +'&ralateUid='+ tsina +'&searchPic=true&style=number' +'" class="article-share-weibo" target="_blank" title="微博"></a>',
  '<span title="Share to"></span>'
  ].join('');
  $this.append(html);

  $('.hoverqrcode').hide();

  var myWidth = 0;
  function updatehoverqrcode(){
    if( typeof( window.innerWidth ) == 'number' ) {
      myWidth = window.innerWidth;
    } else if( document.documentElement && document.documentElement.clientWidth) {
      myWidth = document.documentElement.clientWidth;
    };
    var qrsize = myWidth > 1024 ? 200:100;
    var options = {render: 'image', size: qrsize, fill: '#2ca6cb', text: url, radius: 0.5, quiet: 1};
    var p = $('.article-share-qrcode').position();
    $('.hoverqrcode').empty().css('width', qrsize).css('height', qrsize)
                          .css('left', p.left-qrsize/2+20).css('top', p.top-qrsize-10)
                          .qrcode(options);
  };
  $(window).resize(function(){
    $('.hoverqrcode').hide();
  });
  $('.article-share-qrcode').click(function(){
    updatehoverqrcode();
    $('.hoverqrcode').toggle();
  });
  $('.article-share-qrcode').hover(function(){}, function(){
      $('.hoverqrcode').hide();
  });
});   
</script>



<script type="text/javascript">
  var duoshuoQuery = {short_name:"lisx"};
  (function() {
    var ds = document.createElement('script');
    ds.type = 'text/javascript';ds.async = true;
    ds.src = '//static.duoshuo.com/embed.js';
    ds.charset = 'UTF-8';
    (document.getElementsByTagName('head')[0] 
    || document.getElementsByTagName('body')[0]).appendChild(ds);
  })();
</script> 







<link rel="stylesheet" href="/fancybox/jquery.fancybox.css" media="screen" type="text/css">
<script src="/fancybox/jquery.fancybox.pack.js"></script>
<script type="text/javascript">
$(document).ready(function(){ 
  $('.article-content').each(function(i){
    $(this).find('img').each(function(){
      if ($(this).parent().hasClass('fancybox')) return;
      var alt = this.alt;
      if (alt) $(this).after('<span class="caption">' + alt + '</span>');
      $(this).wrap('<a href="' + this.src + '" title="' + alt + '" class="fancybox"></a>');
    });
    $(this).find('.fancybox').each(function(){
      $(this).attr('rel', 'article' + i);
    });
  });
  if($.fancybox){
    $('.fancybox').fancybox();
  }
}); 
</script>



<!-- Analytics Begin -->



<script>
var _hmt = _hmt || [];
(function() {
  var hm = document.createElement("script");
  hm.src = "//hm.baidu.com/hm.js?e6d1f421bbc9962127a50488f9ed37d1";
  var s = document.getElementsByTagName("script")[0]; 
  s.parentNode.insertBefore(hm, s);
})();
</script>



<!-- Analytics End -->

<!-- Totop Begin -->

	<div id="totop">
	<a title="返回顶部"><img src="/img/scrollup.png"/></a>
	</div>
	<script src="/js/totop.js"></script>

<!-- Totop End -->

<!-- MathJax Begin -->
<!-- mathjax config similar to math.stackexchange -->


<!-- MathJax End -->

<!-- Tiny_search Begin -->

<!-- Tiny_search End -->

  </body>
</html>
